home *** CD-ROM | disk | FTP | other *** search
/ Die Speccy' 97 / Die Speccy' 97.iso / amiga_system / the_aminet / comm / bbs / bbbbs85.lha / rexx / bbsULDL.rexx < prev    next >
OS/2 REXX Batch file  |  1994-11-18  |  6KB  |  259 lines

  1. /* $VER: bbsULDL.rexx 8.3 (18.11.94)
  2. - counts upload/download statistics -
  3. copyright 1990-94 Richard Lee Stockton
  4.        - FREELY DISTRIBUTABLE -
  5. */
  6.  
  7. /* exclude = dirs or files excluded from the "most popular file" list */
  8. /* This is a space separated list. files need to be  dir/filename  */
  9. exclude=''
  10. exclude=UPPER(exclude)
  11.  
  12. CALL TIME('R')
  13. HOW_MANY=25
  14. CALL PRAGMA('P',-2)
  15. SIGNAL ON ERROR
  16. SIGNAL ON SYNTAX
  17. SIGNAL ON FAILURE
  18. NUMERIC DIGITS 14
  19.  
  20. inarg=''
  21. PARSE ARG inarg .
  22. test=COMPRESS(UPPER(inarg),' -')
  23. IF test='?' | test='H' | test='USAGE' | test='HELP' THEN
  24.   DO
  25.     SAY 'Usage: rx bbsULDL [filename or CLI]'
  26.     SAY
  27.     SAY 'CLI writes to the console.'
  28.     SAY 'If a filename or the letters CLI are not included,'
  29.     SAY 'writes to a file called Information/STATS.ULDL'
  30.   END
  31.  
  32. figarg='s:CONFIG.BBS'
  33. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  34. x=OPEN(f,figarg,'R')
  35. IF x=0 THEN
  36.   DO
  37.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  38.     EXIT(20)
  39.   END
  40.  
  41. CALL SETCLIP('BBS_STAT','ON')
  42. lynes.=''
  43. DO i=1 TO 25
  44.   lynes.i=READLN(f)
  45. END
  46. CALL CLOSE(f)
  47.  
  48. compos=POS('/*',lynes.1)
  49. IF compos>0 THEN lynes.1=LEFT(lynes.1,compos-1)
  50.  
  51. bbsname = STRIP(lynes.1)
  52. sysop   = WORD(lynes.2,1)
  53. bbspath = WORD(lynes.6,1)
  54. IF ~EXISTS(bbspath) THEN
  55.   DO
  56.     SAY bbspath 'does not exist!'
  57.     CALL SETCLIP('BBS_STAT')
  58.     EXIT(20)
  59.   END
  60. testchar=RIGHT(bbspath,1)
  61. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  62. IF WORD(lunes.25,1)=1 THEN scratch=bbspath'Scratch'
  63. ELSE scratch='RAM:Scratch'
  64.  
  65. IF inarg='' THEN
  66.   DO
  67.     CALL CLOSE(STDOUT)
  68.     CALL OPEN(STDOUT,scratch'/bbsULDL.STDOUT','W')
  69.     SAY SUBSTR(SOURCELINE(1),10)
  70.   END
  71. counts.=0
  72. popular.=0
  73. largest.=0
  74. namelist=''
  75. dir.=''
  76. x=OPEN(f,bbspath'Lists/Libraries','R')
  77. IF x=0 THEN
  78.   DO
  79.     SAY 'Could not open' bbspath'Lists/Libraries!'
  80.     CALL SETCLIP('BBS_STAT')
  81.     EXIT(20)
  82.   END
  83. DO i=1
  84.   line=READLN(f)
  85.   IF EOF(f) | UPPER(line)='END' THEN LEAVE i
  86.   num=WORD(line,1)
  87.   IF DATATYPE(num,'W') THEN dir.num=WORD(line,2)
  88. END
  89. CALL CLOSE(f)
  90.  
  91. totfiles=0
  92. DO h=1 TO 99
  93.   IF dir.h='' THEN ITERATE h
  94.   fyles=SHOWDIR(bbspath'FileNotes/'dir.h)
  95.   totfiles=totfiles+WORDS(fyles)
  96.   DO i=1 TO WORDS(fyles)
  97.     fname=WORD(fyles,i)
  98.     filenote=bbspath'FileNotes/'dir.h'/'fname
  99.     x=OPEN(f,filenote,'R')
  100.     IF x=0 THEN
  101.       DO
  102.         SAY filenote 'did not open!'
  103.         ITERATE i
  104.       END
  105.     line1=READLN(f)
  106.     line2=READLN(f)
  107.     line3=READLN(f)
  108.     CALL CLOSE(f)
  109.     fnum=WORD(line1,2)
  110.     size=WORD(line2,4)
  111.     dls=WORD(line2,7)
  112.     name=WORD(line3,2)
  113.     IF name~=UPPER(sysop) THEN
  114.       IF FIND(namelist,name)=0 THEN namelist=namelist name
  115.     counts.name.BYTES=counts.name.BYTES+size
  116.     counts.TOTAL.BYTES=counts.TOTAL.BYTES+size
  117.     counts.name.ULOADS=counts.name.ULOADS+1
  118.     counts.TOTAL.DLOADS=counts.TOTAL.DLOADS+dls
  119.     IF dls>popular.HOW_MANY THEN
  120.       DO
  121.         IF FIND(exclude,UPPER(dir.h))>0 | FIND(exclude,UPPER(dir.h'/'fname)) THEN ITERATE i
  122.         line=RIGHT(dls,4) LEFT(fname,22) RIGHT(fnum,5) LEFT(dir.h,18) LEFT(name,20)
  123.         popular.HOW_MANY=dls
  124.         popular.HOW_MANY.0=line
  125.         DO j=HOW_MANY-1 TO 1 BY -1
  126.           jj=j+1
  127.           IF popular.jj<=popular.j THEN LEAVE j
  128.           temp=popular.jj
  129.           temp0=popular.jj.0
  130.           popular.jj=popular.j
  131.           popular.jj.0=popular.j.0
  132.           popular.j=temp
  133.           popular.j.0=temp0
  134.         END
  135.       END
  136.   END
  137. END
  138.  
  139. DO nameindex=1 TO WORDS(namelist)
  140.   name=WORD(namelist,nameindex)
  141.   IF counts.name.BYTES>largest.HOW_MANY THEN
  142.     DO
  143.       line=LEFT(name,20) LEFT(' ',21) RIGHT(comma(counts.name.BYTES),11) 'bytes'RIGHT(comma(counts.name.ULOADS),5) 'files'
  144.       largest.HOW_MANY=counts.name.BYTES
  145.       largest.HOW_MANY.0=line
  146.       DO j=HOW_MANY-1 TO 1 BY -1
  147.         jj=j+1
  148.         IF largest.jj<=largest.j THEN LEAVE j
  149.         temp=largest.jj
  150.         temp0=largest.jj.0
  151.         largest.jj=largest.j
  152.         largest.jj.0=largest.j.0
  153.         largest.j=temp
  154.         largest.j.0=temp0
  155.       END
  156.     END
  157. END
  158.  
  159.  
  160. /* OUTPUT */
  161.  
  162. IF inarg='' THEN inarg=bbspath'Information/STATS.ULDL'
  163. IF UPPER(inarg)~='CLI' THEN
  164.   DO
  165.     CALL CLOSE(STDOUT)
  166.     CALL OPEN(STDOUT,inarg,'W')
  167.     IF x=0 THEN
  168.       DO
  169.         SAY inarg 'would not open for writing!'
  170.         CALL SETCLIP('BBS_STAT')
  171.         EXIT(20)
  172.       END
  173.   END
  174.  
  175. SAY LEFT('-',75,'-')
  176. SAY TRIM(CENTER('Upload/Download statistics through' DATE() 'at' TIME('C'),75))
  177. SAY TRIM(CENTER(bbsname,75))
  178. SAY TRIM(CENTER(comma(counts.TOTAL.BYTES) 'bytes in' comma(totfiles) 'files uploaded by' comma(WORDS(namelist)) 'of' comma(WORDS(SHOWDIR(bbspath'Users'))) 'current users.',75))
  179. SAY LEFT('-',75,'-')
  180.  
  181. SAY
  182. SAY
  183. SAY CENTER('Top' HOW_MANY 'favorite files from' comma(counts.TOTAL.DLOADS) 'total downloads',75)
  184. SAY LEFT('-',75,'-')
  185. SAY '  DLoads' LEFT('Filename',22) 'File#' LEFT('Library',18) LEFT('Uploader',20)
  186. SAY LEFT('-',75,'-')
  187. DO i=1 TO HOW_MANY
  188.   IF popular.i=0 THEN LEAVE i
  189.   SAY RIGHT(i,2)'.' popular.i.0
  190. END
  191.  
  192. SAY
  193. SAY
  194. SAY CENTER('Top' HOW_MANY 'uploaders of files currently in the libraries (excludes sysop)',75)
  195. SAY LEFT('-',75,'-')
  196. DO i=1 TO HOW_MANY
  197.   IF largest.i=0 THEN LEAVE i
  198.   x=OPEN(f,bbspath'Users/'STRIP(WORD(largest.i.0,1)),'R')
  199.   IF x=0 THEN ITERATE i
  200.   CALL READLN(f)
  201.   CALL READLN(f)
  202.   city=READLN(f)
  203.   CALL CLOSE(f)
  204.   city=TRANSLATE(city,'     ','+-.*/')
  205.   DO j=WORDS(city) TO 1 BY -1
  206.     IF DATATYPE(WORD(city,j),'N') THEN city=STRIP(DELWORD(city,j,1))
  207.     IF UPPER(WORD(city,j))='USA' THEN city=STRIP(DELWORD(city,j,1))
  208.   END
  209.   city=SPACE(city,1)
  210.   SAY RIGHT(i,2)'.' OVERLAY(city,largest.i.0,22,21)
  211. END
  212. SAY
  213. t=(.5+TIME('E'))%1
  214. min=t%60
  215. hrs=min%60
  216. min=min//60
  217. sec=t//60
  218. temp=' - It took'
  219. IF hrs>1 THEN temp=temp hrs 'hours'
  220. ELSE IF hrs=1 THEN temp=temp '1 hour'
  221. IF min>1 THEN temp=temp min 'minutes'
  222. ELSE IF min=1 THEN temp=temp '1 minute'
  223. temp=temp sec 'seconds to compile this report. -'
  224. SAY temp
  225. SAY
  226. CALL SETCLIP('BBS_STAT')
  227. EXIT;
  228.  
  229.  
  230. comma:
  231. ARG num .
  232. dgt=LENGTH(num)
  233. numtext=''
  234. IF dgt>3 THEN numtext=','RIGHT(num,3)
  235. IF dgt>6 THEN numtext=','LEFT(RIGHT(num,6),3)||numtext
  236. IF dgt>9 THEN
  237.   DO
  238.     numtext=','LEFT(RIGHT(num,9),3)||numtext
  239.     numtext=LEFT(num,dgt-9)||numtext
  240.   END
  241. ELSE IF dgt>6 THEN numtext=LEFT(num,dgt-6)||numtext
  242. ELSE IF dgt>3 THEN numtext=LEFT(num,dgt-3)||numtext
  243. ELSE numtext=num
  244. RETURN(numtext)
  245.  
  246.  
  247. SYNTAX:
  248. FAILURE:
  249. ERROR:
  250. SAY 'Line:' SIGL ERRORTEXT(RC)
  251. SAY
  252. SAY line1
  253. SAY line2
  254. SAY line3
  255. CALL SETCLIP('BBS_STAT')
  256. EXIT;
  257.  
  258. /* end of uldl.rexx */
  259.